ネストされたステートマシンにおいて親ステートマシンがハングアップする理由を教えてください
困っていること
StepFunctions にて同期実行するネストされたステートマシンを作成しました。
実行したところ、子ステートマシンが終了しているにも関わらず、親ステートマシンが子ステートマシンの処理を待機し続けています。
どう対応すればいいの?
親ステートマシンの IAM ロールに必要な許可があるかご確認ください。
ステートマシン上にて同期実行(.sync)を用いてジョブを実行した際、ステートマシンは「ポーリング」もしくは「
イベント」という 2 つの方法を用いてジョブの実行状況を取得いたします。
「ポーリング」を用いてジョブの実行状況を取得するためには、ステートマシンに対して実行対象のサービスの Describe または Get API アクションに対する許可が必要となり、「イベント」を用いてジョブの実行状況を取得するためには、ステートマシンに対して events:PutTargets、events:PutRule、events:DescribeRule の許可が必要となります。
Step Functions は、接続サービスでジョブが実行されたときのジョブのステータスをモニタリングするため、ポーリングとイベントという 2 つの方法を使用します。
ポーリングには、Describe または Get API アクション に対する許可 (ecs:DescribeTasks または glue:GetJobRun など) が必要です。これらの許可がロールに欠落している場合、Step Functions はジョブのステータスを判断できない場合があります。これは、一部の Run a Job (.sync) サービス統合はイベントをサポート EventBridgeしておらず、一部のサービスはベストエフォートベースでのみイベントを送信するためです。
AWS サービスから Amazon に送信されるイベント EventBridge は、マネージドルールを使用して Step Functions に転送され、events:PutTargets、、events:PutRuleおよび のアクセス許可が必要ですevents:DescribeRule。これらの許可がロールに欠落している場合、Step Functions がジョブの完了を認識するまで遅延が発生する可能性があります。 EventBridge イベントの詳細については、「 AWS のサービスからのイベント」を参照してください。
上記、許可がステートマシンの IAM ロールに対して不足している場合、ステートマシンが実行状況を取得できずハングアップする可能性がございます。
ネストされたステートマシンの場合、呼び出し先のサービスは StepFunctions となるため、実行状況の確認に必要な権限は以下のものになります。
- states:DescribeExecution
- events:PutTargets
- events:PutRule
- events:DescribeRule
こちらの権限が親ステートマシンの IAM ロールにて許可されているかご確認ください。